const http = require('http')
const path = require('path')
const fs = require('fs')
const url = require('url')
const qs = require('querystring')
// 定义好对应的mime类型
let mimeTypes = require('./libs/mime')
// 定义网站根目录
const webRoot = path.resolve('public')

// 得到一个webserver对象
http.createServer((req, res) => {

  res.send = function (data) {
    if (typeof data == 'object') {
      res.setHeader('content-type', 'application/json;charset=utf-8')
      data = JSON.stringify(data)
    }
    res.end(data)
  }



  if ('/favicon.ico' != req.url) {
    // let { pathname, query } = req.url == '/' ? { pathname: '/index.html', query: {} } : url.parse(req.url, true)
    let { pathname, query } = url.parse(req.url, true)
    pathname = pathname == '/' ? '/index.html' : pathname
    // 得到路径中的扩展名
    let extname = path.extname(pathname) ? path.extname(pathname).slice(1) : ''

    if ('' == extname) {// 接口
      // post数据它是以流的形式进行数据传递
      if (req.method == 'POST') {
        if (pathname == '/login') {
          let postData = ''
          // 在nodejs中流，用事件来完成数据接受
          // 接受数据中
          req.on('data', chunk => {
            postData += chunk
          })
          // 此事件触发，表示数据接受完毕
          req.on('end', () => {
            // res.end(JSON.stringify(qs.parse(postData)))
            res.send(qs.parse(postData))
          })
        }
      }

    } else { // 文件操作
      // 请求的url地址和本机服务器中存在的文件进行映射, 得到访问文件路径(绝对路径)
      var filepath = path.join(webRoot, pathname)
      // 短语运算
      let mime = mimeTypes[extname] || 'text/html;charset=utf-8'
      // 判断当前文件是否存在
      if (fs.existsSync(filepath)) {
        // 设置响应头中的mime类型
        res.setHeader('content-type', mime)
        // 读取磁盘中存在的文件，显示
        res.end(fs.readFileSync(filepath))
      } else {
        var filepath = path.join(webRoot, '/404.html')
        // 设置响应头中的mime类型
        res.setHeader('content-type', mime)
        res.statusCode = 404
        // 响应体
        res.end(fs.readFileSync(filepath))
      }
    }
  }
}).listen(3000, '127.0.0.1', () => console.log('服务器启动'))


